Rows: 88951 Columns: 5── Column specification ────────────────────────────
Delimiter: "\t"
chr (2): region, chr
dbl (3): midPos, Nsites, Fst
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

This next set of figures were made using ANGSD Allele Frequency estimation. This was run with a known major and unknown minor, in which the unknown minor allele frequency is plotted on the y-axis. The major allele is assumed to be known (inferred or given by user) however the minor allele is not determined. Instead it is summed over the 3 possible minor alleles weighted by their probabilities. The allele frequency estimator from genotype likelihoods was done using the EM algorithm. Targeting chromosome 3, and further the specific region around 24,700,000 bp, was chosen based on the pairwise Fst sliding window plot above, where we see a spike at chromosome 3 in that particular region interesting in that previous studies found an average Fst of 0.008 when comparing Canadian to Southern New England or Mid-Atlantic samples, making the Fst values in this region magnitudes larger than expected. The last time the lab (Anthony) saw a peak such as this, it was the greb1l gene. All ANGSD runs also were referenced to the American shad genome.

The following figure is constrained on chromosome 3 to region 24,704,000-24,750,000.

The following figure shows the allele frequencies on a broader range on chromosome 3 from 24,650,000-24,780,000 with a minimum minor allele frequency of 0.05.

The following figure is similar to the previous, but contains all minor allele frequencies.

GRL:

The following two figures are the minor allele frequencies from only the Great Lakes and Finger Lakes samples, with the first being unfiltered for minimum allele frequency and the second having a minMaf of 0.05.

SANAD:

The following two figures are the minor allele frequencies from only the South Atlantic Gulf and Mid-Atlantic samples, with the first being unfiltered for minimum allele frequency and the second having a minMaf of 0.05.

NANAD:

The following two figures are the minor allele frequencies from only the Canadian and Northern New England samples, with the first being unfiltered for minimum allele frequency and the second having a minMaf of 0.05.

Screen grab from UCSC genome browser of American shad reference genome at our region of interest as found in the pairwise Fst plot.
Screen grab from UCSC genome browser of American shad reference genome at our region of interest as found in the pairwise Fst plot.
Rows: 38 Columns: 4── Column specification ────────────────────────────
Delimiter: "\t"
chr (4): Gene, Official Full Name, Gene Type, Su...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Genes Within The Region of Interest
chr3:24,660,000-24,750,000
Official Full Name Gene Type Summary
pvalb4 parvalbumin 4 protein coding predicted to enable calcium ion binding activity



predicted to be activate in cytoplasm and nucleus



is expressed in musculature system; myotome; and pectoral fin muscle
pvalb8 parvalbumin 8 protein coding predicted to enable calcium ion binding activity



predicted to be active in cytoplasm and nucleus



is expressed in several structures, including adenohypophyseal placode; epidermal cell; hypophysis; integument; and sensory system



othologous to several human genes including OCM2
lmtk2 lemur tyrosine kinase 2 protein coding predicted to enable ATP binding activity and protein kinase activity



predicted to be involved in axogenesis; positive regulation of kinase activity; and transmembrane receptor protein tyrosine kinase signaling pathway



predicted to act upstream of or within protein phosphorylation



predicted to be part of receptor complex



predicted to be integral component of plasma membrane



orthologous to human LMTK2
aimp2 aminoacyl tRNA synthetase complex interacting multifunctional protein 2 protein coding predicted to be involved in positive regulation of aminoacyl-tRNA ligase activity



predicted to act upstream of or within apoptotic process and cell differentiation



predicted to be located in cytodol and nucleus



predicted to be part of aminoacyl-tRNA synthetase multienzyme complex



is expressed in several structures, including alar plate midbrain region; head; immature eye; midbrain; and musculature system



human ortholog of this gene implicated in hypomyelinating leukodystrophy, a group of neurodevelopmental disorders that affect proper formation of the myelin sheath in the central nervous system
myl7 myosin, light chain 7, regulatory protein coding predicted to enable calcium ion binding activity



acts upstream of or within several processes, including cardiac muscle cell proliferationl heart contraction; and myofibril assembly



is expressed in several structures, including corpsucles of Stannis; heart primordium; mesoderm; muscle; and pericardial region



orthologous to human MYL7
cacng4b calcium channel, voltage-dependent, gamma subunit 4b protein coding predicted to enable channel regulator activity and voltage-gated calcium channel activity



predicted to be involved in serveal processes, including neurotransmitter receptor internalization; neurotransmitter receptor transport, postsynaptic endosome to lysosome; and postsynaptic neurotransmitter receptor diffusion trapping



predicted to act upstream of or within calcium ion transmembrane transport and regulation of ion transmembrane transport



predicted to be located in membrane



predicted to be integral component of membrane



predicted to be part of AMPA glutamate receptor complex



predicted to be active in postsynaptic density membrane



orthologous to human CACNG4
cacng1b calcium channel, voltage-dependent, gamma subunit 1b protein coding predicted to enable calcium channel regulator activity



predicted to be involved in regulation of calcium ion transmembrane transport via high voltage-gated calcium channel



predicted to act upstream of or within calcium ion transmembrane transport and regulation of ion transmembrane transport



predicted to be located in plasma membrane



predicted to be integral component of membrane



predicted to be part of L-type voltage-gated calcium channel complex



human ortholog(s) of this gene implicated in malignant hyperthermia, a severe reaction to certain drugs used for anesthesia with fast rise in body temperature, rigid muscles or spasms, and rapid heart rate
References
pvalb4: https://www.ncbi.nlm.nih.gov/gene/?term=Danio+rerio+pvalb4
pvalb8: https://www.ncbi.nlm.nih.gov/gene/?term=Danio+rerio+pvalb8
lmtk2: https://www.ncbi.nlm.nih.gov/gene/564666/
aimp2: https://www.ncbi.nlm.nih.gov/gene/406647
myl7: https://www.ncbi.nlm.nih.gov/gene/30592/
cacng4b: https://www.ncbi.nlm.nih.gov/gene/794222/
cacng1b: https://www.ncbi.nlm.nih.gov/gene/571193
LS0tCnRpdGxlOiAiQWxsZWxlIEZyZXF1ZW5jaWVzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG8gPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ3QpCmxpYnJhcnkoZ2d0ZXh0KQpgYGAKCmBgYHtyIHNhbmFkeG5hbmFkLCBlY2hvID0gRkFMU0V9CmNvbHMgPC0gYygicmVnaW9uIiwgImNociIsICJtaWRQb3MiLCAiTnNpdGVzIiwgIkZzdCIpCmRhdGEgPC0gcmVhZF9kZWxpbSgiZGF0YS9TQU5BRC0teC0tTkFOQUQtLXNpemUtNTAwMDAtLXN0ZXAtMTAwMDAudHN2IiwgCiAgICAgICAgICAgICAgICAgICBza2lwID0gMiwKICAgICAgICAgICAgICAgICAgIGRlbGltID0gIlx0IiwKICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMpCgoKCmRhdGFfY3VtIDwtIGRhdGEgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCmRhdGEgPC0gZGF0YSAlPiUKICBpbm5lcl9qb2luKGRhdGFfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpheGlzX3NldCA8LSBkYXRhICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGRhdGEsCiAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBheGlzX3NldCRjaHIsCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGF4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgoYXhpc19zZXQkY2hyKSkpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gTlVMTCwKICAgICAgIHkgPSAiRnN0IiwKICAgICAgIHRpdGxlID0gIlNvdXRoZXJuIEFuYWRyb21vdXMgdmVyc3VzIE5vcnRoZXJuIEFuYWRyb21vdXMgU2FtcGxlcyIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCnBsb3QKCgoKY2hyb20zIDwtIGZpbHRlcihkYXRhLCBjaHIgPT0gIk5DXzA1NTk1OS4xIikKCmNocjNfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGNocm9tMywKICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBGc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICIjMjQyYjM1IikpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMC41LCAzKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSAiIzI0MmIzNSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9ICJQb3NpdGlvbiIsIAogICAgICAgeSA9ICJGc3QiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKY2hyM19wbG90CgoKc3Bpa2UgPC0gZmlsdGVyKGNocm9tMywgRnN0ID4gMC4xNSkKc3Bpa2VfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IHNwaWtlLAogICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IEZzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gIiMyNDJiMzUiKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1KSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpzcGlrZV9wbG90CmBgYAoKVGhpcyBuZXh0IHNldCBvZiBmaWd1cmVzIHdlcmUgbWFkZSB1c2luZyBBTkdTRCBBbGxlbGUgRnJlcXVlbmN5IGVzdGltYXRpb24uIFRoaXMgd2FzIHJ1biB3aXRoIGEga25vd24gbWFqb3IgYW5kIHVua25vd24gbWlub3IsIGluIHdoaWNoIHRoZSB1bmtub3duIG1pbm9yIGFsbGVsZSBmcmVxdWVuY3kgaXMgcGxvdHRlZCBvbiB0aGUgeS1heGlzLiBUaGUgbWFqb3IgYWxsZWxlIGlzIGFzc3VtZWQgdG8gYmUga25vd24gKGluZmVycmVkIG9yIGdpdmVuIGJ5IHVzZXIpIGhvd2V2ZXIgdGhlIG1pbm9yIGFsbGVsZSBpcyBub3QgZGV0ZXJtaW5lZC4gSW5zdGVhZCBpdCBpcyBzdW1tZWQgb3ZlciB0aGUgMyBwb3NzaWJsZSBtaW5vciBhbGxlbGVzIHdlaWdodGVkIGJ5IHRoZWlyIHByb2JhYmlsaXRpZXMuIFRoZSBhbGxlbGUgZnJlcXVlbmN5IGVzdGltYXRvciBmcm9tIGdlbm90eXBlIGxpa2VsaWhvb2RzIHdhcyBkb25lIHVzaW5nIHRoZSBFTSBhbGdvcml0aG0uIFRhcmdldGluZyBjaHJvbW9zb21lIDMsIGFuZCBmdXJ0aGVyIHRoZSBzcGVjaWZpYyByZWdpb24gYXJvdW5kIDI0LDcwMCwwMDAgYnAsIHdhcyBjaG9zZW4gYmFzZWQgb24gdGhlIHBhaXJ3aXNlIEZzdCBzbGlkaW5nIHdpbmRvdyBwbG90IGFib3ZlLCB3aGVyZSB3ZSBzZWUgYSBzcGlrZSBhdCBjaHJvbW9zb21lIDMgaW4gdGhhdCBwYXJ0aWN1bGFyIHJlZ2lvbiBpbnRlcmVzdGluZyBpbiB0aGF0IHByZXZpb3VzIHN0dWRpZXMgZm91bmQgYW4gYXZlcmFnZSBGc3Qgb2YgMC4wMDggd2hlbiBjb21wYXJpbmcgQ2FuYWRpYW4gdG8gU291dGhlcm4gTmV3IEVuZ2xhbmQgb3IgTWlkLUF0bGFudGljIHNhbXBsZXMsIG1ha2luZyB0aGUgRnN0IHZhbHVlcyBpbiB0aGlzIHJlZ2lvbiBtYWduaXR1ZGVzIGxhcmdlciB0aGFuIGV4cGVjdGVkLiBUaGUgbGFzdCB0aW1lIHRoZSBsYWIgKEFudGhvbnkpIHNhdyBhIHBlYWsgc3VjaCBhcyB0aGlzLCBpdCB3YXMgdGhlIGdyZWIxbCBnZW5lLiBBbGwgQU5HU0QgcnVucyBhbHNvIHdlcmUgcmVmZXJlbmNlZCB0byB0aGUgQW1lcmljYW4gc2hhZCBnZW5vbWUuCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0Kc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL2FsZXdpZmUtc3Vic2V0LXctcmVmX2NocjMubWFmcyIsIAogICAgICAgICAgICAgICAgICAgc2VwID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUKQoKcHZhbGI4IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzA1Nzc5ICYgcG9zaXRpb24gPCAyNDcyMTQ2NCkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiOCIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKcHZhbGI0IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzI0OTI0ICYgcG9zaXRpb24gPCAyNDcyNjA1MiklPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiNCIpICU+JSAKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmxtdGsyIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzM1NjI0ICYgcG9zaXRpb24gPCAyNDc2MDA4OSkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImxtdGsyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpteWw3IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzMyMjM3ICYgcG9zaXRpb24gPCAyNDczNjE1NSkgJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJteWw3IikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQphaW1wMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY5MDIyOCAmIHBvc2l0aW9uIDwgMjQ2OTQwMjgpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAiYWltcDIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nNGIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NzM0MTggJiBwb3NpdGlvbiA8IDI0NjgzOTc3KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2Fjbmc0YiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKY2FjbmcxYiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY1NDQwMCAmIHBvc2l0aW9uIDwgMjQ2NjI2NjYpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJjYWNuZzFiIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQoKZ2VuZXMgPC0gYmluZF9yb3dzKHB2YWxiNCwgcHZhbGI4LCBsbXRrMiwgbXlsNywgYWltcDIsIGNhY25nMWIsIGNhY25nNGIpCgpzbnBzIDwtIGxlZnRfam9pbihzbnBzLCBnZW5lcywKICAgICAgICAgIGJ5ID0gYygicG9zaXRpb24iID0gInBvc2l0aW9uIikpCgpnZW5lX2NvbG9yIDwtIGMoYGFpbXAyYCA9ICIjMTcyNjNiIiwKICAgICAgICAgICAgICAgIGBjYWNuZzFiYCA9ICIjODY3MDk1IiwKICAgICAgICAgICAgICAgIGBjYWNuZzRiYCA9ICIjNTM2YTViIiwKICAgICAgICAgICAgICAgIGBsbXRrMmAgPSAiI2Y1ZDJmMSIsCiAgICAgICAgICAgICAgICBgbXlsN2AgPSAiIzUwNGE1ZCIsCiAgICAgICAgICAgICAgICBgcHZhbGI0YCA9ICIjZWZmZWZmIiwKICAgICAgICAgICAgICAgIGBwdmFsYjhgID0gIiNhYWQxZjMiKQoKZ2dwbG90KGRhdGEgPSBzbnBzLCAKICAgICAgIG1hcHBpbmcgPSBhZXMoeSA9IHVua25vd25FTSwKICAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGdlbmUpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSwgCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCAKICAgICAgICAgICAgIHNpemUgPSAxLjUpICsKICB0aGVtZV9idygpICsKICB0aGVtZShwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMiwKICAgICAgICAgICAgIHN0cm9rZSA9IDAuMDUsCiAgICAgICAgICAgICBhbHBoYSA9IDAuNzUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGdlbmVfY29sb3IpCmBgYAoKClRoZSBmb2xsb3dpbmcgZmlndXJlIGlzIGNvbnN0cmFpbmVkIG9uIGNocm9tb3NvbWUgMyB0byByZWdpb24gMjQsNzA0LDAwMC0yNCw3NTAsMDAwLgoKYGBge3IgZWNobyA9IEZBTFNFfQpzbnBzIDwtIHJlYWQudGFibGUoImRhdGEvYWxld2lmZS1zdWJzZXQtdy1yZWZfMjQ3LTI0N19yZWdpb24ubWFmcyIsIAogICAgICAgICAgICAgICAgICAgc2VwID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUKQoKcHZhbGI4IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzA1Nzc5ICYgcG9zaXRpb24gPCAyNDcyMTQ2NCkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiOCIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKcHZhbGI0IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzI0OTI0ICYgcG9zaXRpb24gPCAyNDcyNjA1MiklPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiNCIpICU+JSAKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmxtdGsyIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzM1NjI0ICYgcG9zaXRpb24gPCAyNDc2MDA4OSkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImxtdGsyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpteWw3IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzMyMjM3ICYgcG9zaXRpb24gPCAyNDczNjE1NSkgJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJteWw3IikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQphaW1wMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY5MDIyOCAmIHBvc2l0aW9uIDwgMjQ2OTQwMjgpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAiYWltcDIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nNGIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NzM0MTggJiBwb3NpdGlvbiA8IDI0NjgzOTc3KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2Fjbmc0YiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKY2FjbmcxYiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY1NDQwMCAmIHBvc2l0aW9uIDwgMjQ2NjI2NjYpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJjYWNuZzFiIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQoKZ2VuZXMgPC0gYmluZF9yb3dzKHB2YWxiNCwgcHZhbGI4LCBsbXRrMiwgbXlsNywgYWltcDIsIGNhY25nMWIsIGNhY25nNGIpCgpzbnBzIDwtIGxlZnRfam9pbihzbnBzLCBnZW5lcywKICAgICAgICAgIGJ5ID0gYygicG9zaXRpb24iID0gInBvc2l0aW9uIikpCgpnZW5lX2NvbG9yIDwtIGMoYGFpbXAyYCA9ICIjMTcyNjNiIiwKICAgICAgICAgICAgICAgIGBjYWNuZzFiYCA9ICIjODY3MDk1IiwKICAgICAgICAgICAgICAgIGBjYWNuZzRiYCA9ICIjNTM2YTViIiwKICAgICAgICAgICAgICAgIGBsbXRrMmAgPSAiI2Y1ZDJmMSIsCiAgICAgICAgICAgICAgICBgbXlsN2AgPSAiIzUwNGE1ZCIsCiAgICAgICAgICAgICAgICBgcHZhbGI0YCA9ICIjZWZmZWZmIiwKICAgICAgICAgICAgICAgIGBwdmFsYjhgID0gIiNhYWQxZjMiKQoKZ2dwbG90KGRhdGEgPSBzbnBzLCAKICAgICAgIG1hcHBpbmcgPSBhZXMoeSA9IHVua25vd25FTSwKICAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGdlbmUpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSwgCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCAKICAgICAgICAgICAgIHNpemUgPSAxLjUpICsKICB0aGVtZV9idygpICsKICB0aGVtZShwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMiwKICAgICAgICAgICAgIHN0cm9rZSA9IDAuMDUsCiAgICAgICAgICAgICBhbHBoYSA9IDAuNzUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGdlbmVfY29sb3IpCmBgYAoKVGhlIGZvbGxvd2luZyBmaWd1cmUgc2hvd3MgdGhlIGFsbGVsZSBmcmVxdWVuY2llcyBvbiBhIGJyb2FkZXIgcmFuZ2Ugb24gY2hyb21vc29tZSAzIGZyb20gMjQsNjUwLDAwMC0yNCw3ODAsMDAwIHdpdGggYSBtaW5pbXVtIG1pbm9yIGFsbGVsZSBmcmVxdWVuY3kgb2YgMC4wNS4KCmBgYHtyIGVjaG8gPSBGQUxTRX0Kc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL2FsZXdpZmUtc3Vic2V0LXctcmVmX3NwZWMtZ2VuZXMubWFmcyIsIAogICAgICAgICAgICAgICAgICAgc2VwID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUKQoKCnB2YWxiOCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcwNTc3OSAmIHBvc2l0aW9uIDwgMjQ3MjE0NjQpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjgiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCnB2YWxiNCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcyNDkyNCAmIHBvc2l0aW9uIDwgMjQ3MjYwNTIpJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjQiKSAlPiUgCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpsbXRrMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczNTYyNCAmIHBvc2l0aW9uIDwgMjQ3NjAwODkpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJsbXRrMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbXlsNyA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczMjIzNyAmIHBvc2l0aW9uIDwgMjQ3MzYxNTUpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAibXlsNyIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKYWltcDIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2OTAyMjggJiBwb3NpdGlvbiA8IDI0Njk0MDI4KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gImFpbXAyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzRiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjczNDE4ICYgcG9zaXRpb24gPCAyNDY4Mzk3NykgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nNGIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nMWIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NTQ0MDAgJiBwb3NpdGlvbiA8IDI0NjYyNjY2KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2FjbmcxYiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKCmdlbmVzIDwtIGJpbmRfcm93cyhwdmFsYjQsIHB2YWxiOCwgbG10azIsIG15bDcsIGFpbXAyLCBjYWNuZzFiLCBjYWNuZzRiKQoKc25wcyA8LSBsZWZ0X2pvaW4oc25wcywgZ2VuZXMsCiAgICAgICAgICBieSA9IGMoInBvc2l0aW9uIiA9ICJwb3NpdGlvbiIpKQoKZ2VuZV9jb2xvciA8LSBjKGBhaW1wMmAgPSAiIzE3MjYzYiIsCiAgICAgICAgICAgICAgICBgY2FjbmcxYmAgPSAiIzg2NzA5NSIsCiAgICAgICAgICAgICAgICBgY2Fjbmc0YmAgPSAiIzUzNmE1YiIsCiAgICAgICAgICAgICAgICBgbG10azJgID0gIiNmNWQyZjEiLAogICAgICAgICAgICAgICAgYG15bDdgID0gIiM1MDRhNWQiLAogICAgICAgICAgICAgICAgYHB2YWxiNGAgPSAiI2VmZmVmZiIsCiAgICAgICAgICAgICAgICBgcHZhbGI4YCA9ICIjYWFkMWYzIikKCmdncGxvdChkYXRhID0gc25wcywgCiAgICAgICBtYXBwaW5nID0gYWVzKHkgPSB1bmtub3duRU0sCiAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBnZW5lKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSwgCiAgICAgICAgICAgICBzaXplID0gMS41KSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsCiAgICAgICAgICAgICBzdHJva2UgPSAwLjA1LAogICAgICAgICAgICAgYWxwaGEgPSAwLjc1LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBnZW5lX2NvbG9yKQpgYGAKClRoZSBmb2xsb3dpbmcgZmlndXJlIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzLCBidXQgY29udGFpbnMgYWxsIG1pbm9yIGFsbGVsZSBmcmVxdWVuY2llcy4KCmBgYHtyIGVjaG8gPSBGQUxTRX0Kc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL2FsZXdpZmUtc3Vic2V0LXctcmVmX3NwZWMtZ2VuZXMtbm8tZmlsdC5tYWZzIiwgCiAgICAgICAgICAgICAgICAgICBzZXAgPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFQpCgpwdmFsYjggPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MDU3NzkgJiBwb3NpdGlvbiA8IDI0NzIxNDY0KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAicHZhbGI4IikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpwdmFsYjQgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MjQ5MjQgJiBwb3NpdGlvbiA8IDI0NzI2MDUyKSU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAicHZhbGI0IikgJT4lIAogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbG10azIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MzU2MjQgJiBwb3NpdGlvbiA8IDI0NzYwMDg5KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAibG10azIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCm15bDcgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MzIyMzcgJiBwb3NpdGlvbiA8IDI0NzM2MTU1KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gIm15bDciKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmFpbXAyIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjkwMjI4ICYgcG9zaXRpb24gPCAyNDY5NDAyOCkgJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJhaW1wMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKY2Fjbmc0YiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY3MzQxOCAmIHBvc2l0aW9uIDwgMjQ2ODM5NzcpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJjYWNuZzRiIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzFiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjU0NDAwICYgcG9zaXRpb24gPCAyNDY2MjY2NikgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nMWIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCgpnZW5lcyA8LSBiaW5kX3Jvd3MocHZhbGI0LCBwdmFsYjgsIGxtdGsyLCBteWw3LCBhaW1wMiwgY2FjbmcxYiwgY2Fjbmc0YikKCnNucHMgPC0gbGVmdF9qb2luKHNucHMsIGdlbmVzLAogICAgICAgICAgYnkgPSBjKCJwb3NpdGlvbiIgPSAicG9zaXRpb24iKSkKCmdlbmVfY29sb3IgPC0gYyhgYWltcDJgID0gIiMxNzI2M2IiLAogICAgICAgICAgICAgICAgYGNhY25nMWJgID0gIiM4NjcwOTUiLAogICAgICAgICAgICAgICAgYGNhY25nNGJgID0gIiM1MzZhNWIiLAogICAgICAgICAgICAgICAgYGxtdGsyYCA9ICIjZjVkMmYxIiwKICAgICAgICAgICAgICAgIGBteWw3YCA9ICIjNTA0YTVkIiwKICAgICAgICAgICAgICAgIGBwdmFsYjRgID0gIiNlZmZlZmYiLAogICAgICAgICAgICAgICAgYHB2YWxiOGAgPSAiI2FhZDFmMyIpCgpnZ3Bsb3QoZGF0YSA9IHNucHMsIAogICAgICAgbWFwcGluZyA9IGFlcyh5ID0gdW5rbm93bkVNLAogICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24sIAogICAgICAgICAgICAgICAgICAgICBmaWxsID0gZ2VuZSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC41LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEsIAogICAgICAgICAgICAgc2l6ZSA9IDEuNSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKICBnZW9tX3BvaW50KHNpemUgPSAyLAogICAgICAgICAgICAgc3Ryb2tlID0gMC4wNSwKICAgICAgICAgICAgIGFscGhhID0gMC43NSwgCiAgICAgICAgICAgICBzaGFwZSA9IDIxKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gZ2VuZV9jb2xvcikKYGBgCgpHUkw6CgpUaGUgZm9sbG93aW5nIHR3byBmaWd1cmVzIGFyZSB0aGUgbWlub3IgYWxsZWxlIGZyZXF1ZW5jaWVzIGZyb20gb25seSB0aGUgR3JlYXQgTGFrZXMgYW5kIEZpbmdlciBMYWtlcyBzYW1wbGVzLCB3aXRoIHRoZSBmaXJzdCBiZWluZyB1bmZpbHRlcmVkIGZvciBtaW5pbXVtIGFsbGVsZSBmcmVxdWVuY3kgYW5kIHRoZSBzZWNvbmQgaGF2aW5nIGEgbWluTWFmIG9mIDAuMDUuCgpgYGB7ciBlY2hvID0gRkFMU0V9CnNucHMgPC0gcmVhZC50YWJsZSgiZGF0YS9HUkwtYWxld2lmZS1zdWJzZXQtdy1yZWZfc3BlYy1nZW5lcy1uby1maWx0Lm1hZnMiLCAKICAgICAgICAgICAgICAgICAgIHNlcCA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVCkKCnB2YWxiOCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcwNTc3OSAmIHBvc2l0aW9uIDwgMjQ3MjE0NjQpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjgiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCnB2YWxiNCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcyNDkyNCAmIHBvc2l0aW9uIDwgMjQ3MjYwNTIpJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjQiKSAlPiUgCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpsbXRrMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczNTYyNCAmIHBvc2l0aW9uIDwgMjQ3NjAwODkpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJsbXRrMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbXlsNyA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczMjIzNyAmIHBvc2l0aW9uIDwgMjQ3MzYxNTUpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAibXlsNyIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKYWltcDIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2OTAyMjggJiBwb3NpdGlvbiA8IDI0Njk0MDI4KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gImFpbXAyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzRiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjczNDE4ICYgcG9zaXRpb24gPCAyNDY4Mzk3NykgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nNGIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nMWIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NTQ0MDAgJiBwb3NpdGlvbiA8IDI0NjYyNjY2KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2FjbmcxYiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKCmdlbmVzIDwtIGJpbmRfcm93cyhwdmFsYjQsIHB2YWxiOCwgbG10azIsIG15bDcsIGFpbXAyLCBjYWNuZzFiLCBjYWNuZzRiKQoKc25wcyA8LSBsZWZ0X2pvaW4oc25wcywgZ2VuZXMsCiAgICAgICAgICBieSA9IGMoInBvc2l0aW9uIiA9ICJwb3NpdGlvbiIpKQoKZ2VuZV9jb2xvciA8LSBjKGBhaW1wMmAgPSAiIzE3MjYzYiIsCiAgICAgICAgICAgICAgICBgY2FjbmcxYmAgPSAiIzg2NzA5NSIsCiAgICAgICAgICAgICAgICBgY2Fjbmc0YmAgPSAiIzUzNmE1YiIsCiAgICAgICAgICAgICAgICBgbG10azJgID0gIiNmNWQyZjEiLAogICAgICAgICAgICAgICAgYG15bDdgID0gIiM1MDRhNWQiLAogICAgICAgICAgICAgICAgYHB2YWxiNGAgPSAiI2VmZmVmZiIsCiAgICAgICAgICAgICAgICBgcHZhbGI4YCA9ICIjYWFkMWYzIikKCmdncGxvdChkYXRhID0gc25wcywgCiAgICAgICBtYXBwaW5nID0gYWVzKHkgPSB1bmtub3duRU0sCiAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBnZW5lKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSwgCiAgICAgICAgICAgICBzaXplID0gMS41KSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsCiAgICAgICAgICAgICBzdHJva2UgPSAwLjA1LAogICAgICAgICAgICAgYWxwaGEgPSAwLjc1LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBnZW5lX2NvbG9yKQoKc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL0dSTC1hbGV3aWZlLXN1YnNldC13LXJlZl9zcGVjLWdlbmVzLm1hZnMiLCAKICAgICAgICAgICAgICAgICAgIHNlcCA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVCkKCnB2YWxiOCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcwNTc3OSAmIHBvc2l0aW9uIDwgMjQ3MjE0NjQpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjgiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCnB2YWxiNCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcyNDkyNCAmIHBvc2l0aW9uIDwgMjQ3MjYwNTIpJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjQiKSAlPiUgCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpsbXRrMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczNTYyNCAmIHBvc2l0aW9uIDwgMjQ3NjAwODkpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJsbXRrMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbXlsNyA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczMjIzNyAmIHBvc2l0aW9uIDwgMjQ3MzYxNTUpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAibXlsNyIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKYWltcDIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2OTAyMjggJiBwb3NpdGlvbiA8IDI0Njk0MDI4KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gImFpbXAyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzRiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjczNDE4ICYgcG9zaXRpb24gPCAyNDY4Mzk3NykgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nNGIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nMWIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NTQ0MDAgJiBwb3NpdGlvbiA8IDI0NjYyNjY2KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2FjbmcxYiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKCmdlbmVzIDwtIGJpbmRfcm93cyhwdmFsYjQsIHB2YWxiOCwgbG10azIsIG15bDcsIGFpbXAyLCBjYWNuZzFiLCBjYWNuZzRiKQoKc25wcyA8LSBsZWZ0X2pvaW4oc25wcywgZ2VuZXMsCiAgICAgICAgICBieSA9IGMoInBvc2l0aW9uIiA9ICJwb3NpdGlvbiIpKQoKZ2VuZV9jb2xvciA8LSBjKGBhaW1wMmAgPSAiIzE3MjYzYiIsCiAgICAgICAgICAgICAgICBgY2FjbmcxYmAgPSAiIzg2NzA5NSIsCiAgICAgICAgICAgICAgICBgY2Fjbmc0YmAgPSAiIzUzNmE1YiIsCiAgICAgICAgICAgICAgICBgbG10azJgID0gIiNmNWQyZjEiLAogICAgICAgICAgICAgICAgYG15bDdgID0gIiM1MDRhNWQiLAogICAgICAgICAgICAgICAgYHB2YWxiNGAgPSAiI2VmZmVmZiIsCiAgICAgICAgICAgICAgICBgcHZhbGI4YCA9ICIjYWFkMWYzIikKCmdncGxvdChkYXRhID0gc25wcywgCiAgICAgICBtYXBwaW5nID0gYWVzKHkgPSB1bmtub3duRU0sCiAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBnZW5lKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSwgCiAgICAgICAgICAgICBzaXplID0gMS41KSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsCiAgICAgICAgICAgICBzdHJva2UgPSAwLjA1LAogICAgICAgICAgICAgYWxwaGEgPSAwLjc1LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBnZW5lX2NvbG9yKQpgYGAKCgpTQU5BRDoKClRoZSBmb2xsb3dpbmcgdHdvIGZpZ3VyZXMgYXJlIHRoZSBtaW5vciBhbGxlbGUgZnJlcXVlbmNpZXMgZnJvbSBvbmx5IHRoZSBTb3V0aCBBdGxhbnRpYyBHdWxmIGFuZCBNaWQtQXRsYW50aWMgc2FtcGxlcywgd2l0aCB0aGUgZmlyc3QgYmVpbmcgdW5maWx0ZXJlZCBmb3IgbWluaW11bSBhbGxlbGUgZnJlcXVlbmN5IGFuZCB0aGUgc2Vjb25kIGhhdmluZyBhIG1pbk1hZiBvZiAwLjA1LgoKYGBge3IgZWNobyA9IEZBTFNFfQpzbnBzIDwtIHJlYWQudGFibGUoImRhdGEvU0FOQUQtYWxld2lmZS1zdWJzZXQtdy1yZWZfc3BlYy1nZW5lcy1uby1maWx0Lm1hZnMiLCAKICAgICAgICAgICAgICAgICAgIHNlcCA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVCkKCnB2YWxiOCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcwNTc3OSAmIHBvc2l0aW9uIDwgMjQ3MjE0NjQpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjgiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCnB2YWxiNCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcyNDkyNCAmIHBvc2l0aW9uIDwgMjQ3MjYwNTIpJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjQiKSAlPiUgCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpsbXRrMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczNTYyNCAmIHBvc2l0aW9uIDwgMjQ3NjAwODkpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJsbXRrMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbXlsNyA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczMjIzNyAmIHBvc2l0aW9uIDwgMjQ3MzYxNTUpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAibXlsNyIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKYWltcDIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2OTAyMjggJiBwb3NpdGlvbiA8IDI0Njk0MDI4KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gImFpbXAyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzRiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjczNDE4ICYgcG9zaXRpb24gPCAyNDY4Mzk3NykgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nNGIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nMWIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NTQ0MDAgJiBwb3NpdGlvbiA8IDI0NjYyNjY2KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2FjbmcxYiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKCmdlbmVzIDwtIGJpbmRfcm93cyhwdmFsYjQsIHB2YWxiOCwgbG10azIsIG15bDcsIGFpbXAyLCBjYWNuZzFiLCBjYWNuZzRiKQoKc25wcyA8LSBsZWZ0X2pvaW4oc25wcywgZ2VuZXMsCiAgICAgICAgICBieSA9IGMoInBvc2l0aW9uIiA9ICJwb3NpdGlvbiIpKQoKZ2VuZV9jb2xvciA8LSBjKGBhaW1wMmAgPSAiIzE3MjYzYiIsCiAgICAgICAgICAgICAgICBgY2FjbmcxYmAgPSAiIzg2NzA5NSIsCiAgICAgICAgICAgICAgICBgY2Fjbmc0YmAgPSAiIzUzNmE1YiIsCiAgICAgICAgICAgICAgICBgbG10azJgID0gIiNmNWQyZjEiLAogICAgICAgICAgICAgICAgYG15bDdgID0gIiM1MDRhNWQiLAogICAgICAgICAgICAgICAgYHB2YWxiNGAgPSAiI2VmZmVmZiIsCiAgICAgICAgICAgICAgICBgcHZhbGI4YCA9ICIjYWFkMWYzIikKCmdncGxvdChkYXRhID0gc25wcywgCiAgICAgICBtYXBwaW5nID0gYWVzKHkgPSB1bmtub3duRU0sCiAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBnZW5lKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSwgCiAgICAgICAgICAgICBzaXplID0gMS41KSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsCiAgICAgICAgICAgICBzdHJva2UgPSAwLjA1LAogICAgICAgICAgICAgYWxwaGEgPSAwLjc1LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBnZW5lX2NvbG9yKQoKc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL1NBTkFELWFsZXdpZmUtc3Vic2V0LXctcmVmX3NwZWMtZ2VuZXMubWFmcyIsIAogICAgICAgICAgICAgICAgICAgc2VwID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSBUKQoKcHZhbGI4IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzA1Nzc5ICYgcG9zaXRpb24gPCAyNDcyMTQ2NCkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiOCIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKcHZhbGI0IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzI0OTI0ICYgcG9zaXRpb24gPCAyNDcyNjA1MiklPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gInB2YWxiNCIpICU+JSAKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmxtdGsyIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzM1NjI0ICYgcG9zaXRpb24gPCAyNDc2MDA4OSkgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImxtdGsyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpteWw3IDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NzMyMjM3ICYgcG9zaXRpb24gPCAyNDczNjE1NSkgJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJteWw3IikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQphaW1wMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY5MDIyOCAmIHBvc2l0aW9uIDwgMjQ2OTQwMjgpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAiYWltcDIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nNGIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NzM0MTggJiBwb3NpdGlvbiA8IDI0NjgzOTc3KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2Fjbmc0YiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKY2FjbmcxYiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY1NDQwMCAmIHBvc2l0aW9uIDwgMjQ2NjI2NjYpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJjYWNuZzFiIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQoKZ2VuZXMgPC0gYmluZF9yb3dzKHB2YWxiNCwgcHZhbGI4LCBsbXRrMiwgbXlsNywgYWltcDIsIGNhY25nMWIsIGNhY25nNGIpCgpzbnBzIDwtIGxlZnRfam9pbihzbnBzLCBnZW5lcywKICAgICAgICAgIGJ5ID0gYygicG9zaXRpb24iID0gInBvc2l0aW9uIikpCgpnZW5lX2NvbG9yIDwtIGMoYGFpbXAyYCA9ICIjMTcyNjNiIiwKICAgICAgICAgICAgICAgIGBjYWNuZzFiYCA9ICIjODY3MDk1IiwKICAgICAgICAgICAgICAgIGBjYWNuZzRiYCA9ICIjNTM2YTViIiwKICAgICAgICAgICAgICAgIGBsbXRrMmAgPSAiI2Y1ZDJmMSIsCiAgICAgICAgICAgICAgICBgbXlsN2AgPSAiIzUwNGE1ZCIsCiAgICAgICAgICAgICAgICBgcHZhbGI0YCA9ICIjZWZmZWZmIiwKICAgICAgICAgICAgICAgIGBwdmFsYjhgID0gIiNhYWQxZjMiKQoKZ2dwbG90KGRhdGEgPSBzbnBzLCAKICAgICAgIG1hcHBpbmcgPSBhZXMoeSA9IHVua25vd25FTSwKICAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGdlbmUpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSwgCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCAKICAgICAgICAgICAgIHNpemUgPSAxLjUpICsKICB0aGVtZV9idygpICsKICB0aGVtZShwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMiwKICAgICAgICAgICAgIHN0cm9rZSA9IDAuMDUsCiAgICAgICAgICAgICBhbHBoYSA9IDAuNzUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGdlbmVfY29sb3IpCmBgYAoKTkFOQUQ6CgpUaGUgZm9sbG93aW5nIHR3byBmaWd1cmVzIGFyZSB0aGUgbWlub3IgYWxsZWxlIGZyZXF1ZW5jaWVzIGZyb20gb25seSB0aGUgQ2FuYWRpYW4gYW5kIE5vcnRoZXJuIE5ldyBFbmdsYW5kIHNhbXBsZXMsIHdpdGggdGhlIGZpcnN0IGJlaW5nIHVuZmlsdGVyZWQgZm9yIG1pbmltdW0gYWxsZWxlIGZyZXF1ZW5jeSBhbmQgdGhlIHNlY29uZCBoYXZpbmcgYSBtaW5NYWYgb2YgMC4wNS4KCmBgYHtyIGVjaG8gPSBGQUxTRX0Kc25wcyA8LSByZWFkLnRhYmxlKCJkYXRhL05BTkFELWFsZXdpZmUtc3Vic2V0LXctcmVmX3NwZWMtZ2VuZXMtbm8tZmlsdC5tYWZzIiwgCiAgICAgICAgICAgICAgICAgICBzZXAgPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IFQpCgpwdmFsYjggPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MDU3NzkgJiBwb3NpdGlvbiA8IDI0NzIxNDY0KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAicHZhbGI4IikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpwdmFsYjQgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MjQ5MjQgJiBwb3NpdGlvbiA8IDI0NzI2MDUyKSU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAicHZhbGI0IikgJT4lIAogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbG10azIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MzU2MjQgJiBwb3NpdGlvbiA8IDI0NzYwMDg5KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAibG10azIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCm15bDcgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ3MzIyMzcgJiBwb3NpdGlvbiA8IDI0NzM2MTU1KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gIm15bDciKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmFpbXAyIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjkwMjI4ICYgcG9zaXRpb24gPCAyNDY5NDAyOCkgJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJhaW1wMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKY2Fjbmc0YiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDY3MzQxOCAmIHBvc2l0aW9uIDwgMjQ2ODM5NzcpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJjYWNuZzRiIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzFiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjU0NDAwICYgcG9zaXRpb24gPCAyNDY2MjY2NikgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nMWIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCgpnZW5lcyA8LSBiaW5kX3Jvd3MocHZhbGI0LCBwdmFsYjgsIGxtdGsyLCBteWw3LCBhaW1wMiwgY2FjbmcxYiwgY2Fjbmc0YikKCnNucHMgPC0gbGVmdF9qb2luKHNucHMsIGdlbmVzLAogICAgICAgICAgYnkgPSBjKCJwb3NpdGlvbiIgPSAicG9zaXRpb24iKSkKCmdlbmVfY29sb3IgPC0gYyhgYWltcDJgID0gIiMxNzI2M2IiLAogICAgICAgICAgICAgICAgYGNhY25nMWJgID0gIiM4NjcwOTUiLAogICAgICAgICAgICAgICAgYGNhY25nNGJgID0gIiM1MzZhNWIiLAogICAgICAgICAgICAgICAgYGxtdGsyYCA9ICIjZjVkMmYxIiwKICAgICAgICAgICAgICAgIGBteWw3YCA9ICIjNTA0YTVkIiwKICAgICAgICAgICAgICAgIGBwdmFsYjRgID0gIiNlZmZlZmYiLAogICAgICAgICAgICAgICAgYHB2YWxiOGAgPSAiI2FhZDFmMyIpCgpnZ3Bsb3QoZGF0YSA9IHNucHMsIAogICAgICAgbWFwcGluZyA9IGFlcyh5ID0gdW5rbm93bkVNLAogICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24sIAogICAgICAgICAgICAgICAgICAgICBmaWxsID0gZ2VuZSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC41LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEsIAogICAgICAgICAgICAgc2l6ZSA9IDEuNSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKICBnZW9tX3BvaW50KHNpemUgPSAyLAogICAgICAgICAgICAgc3Ryb2tlID0gMC4wNSwKICAgICAgICAgICAgIGFscGhhID0gMC43NSwgCiAgICAgICAgICAgICBzaGFwZSA9IDIxKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gZ2VuZV9jb2xvcikKCnNucHMgPC0gcmVhZC50YWJsZSgiZGF0YS9OQU5BRC1hbGV3aWZlLXN1YnNldC13LXJlZl9zcGVjLWdlbmVzLm1hZnMiLCAKICAgICAgICAgICAgICAgICAgIHNlcCA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgaGVhZGVyID0gVCkKCnB2YWxiOCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcwNTc3OSAmIHBvc2l0aW9uIDwgMjQ3MjE0NjQpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjgiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCnB2YWxiNCA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDcyNDkyNCAmIHBvc2l0aW9uIDwgMjQ3MjYwNTIpJT4lIAogIGFkZF9jb2x1bW4oZ2VuZSA9ICJwdmFsYjQiKSAlPiUgCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpsbXRrMiA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczNTYyNCAmIHBvc2l0aW9uIDwgMjQ3NjAwODkpICU+JQogIGFkZF9jb2x1bW4oZ2VuZSA9ICJsbXRrMiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKbXlsNyA8LSBmaWx0ZXIoc25wcywgcG9zaXRpb24gPiAyNDczMjIzNyAmIHBvc2l0aW9uIDwgMjQ3MzYxNTUpICU+JSAKICBhZGRfY29sdW1uKGdlbmUgPSAibXlsNyIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKYWltcDIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2OTAyMjggJiBwb3NpdGlvbiA8IDI0Njk0MDI4KSAlPiUgCiAgYWRkX2NvbHVtbihnZW5lID0gImFpbXAyIikgJT4lCiAgc2VsZWN0KHBvc2l0aW9uLCBnZW5lKQpjYWNuZzRiIDwtIGZpbHRlcihzbnBzLCBwb3NpdGlvbiA+IDI0NjczNDE4ICYgcG9zaXRpb24gPCAyNDY4Mzk3NykgJT4lCiAgYWRkX2NvbHVtbihnZW5lID0gImNhY25nNGIiKSAlPiUKICBzZWxlY3QocG9zaXRpb24sIGdlbmUpCmNhY25nMWIgPC0gZmlsdGVyKHNucHMsIHBvc2l0aW9uID4gMjQ2NTQ0MDAgJiBwb3NpdGlvbiA8IDI0NjYyNjY2KSAlPiUKICBhZGRfY29sdW1uKGdlbmUgPSAiY2FjbmcxYiIpICU+JQogIHNlbGVjdChwb3NpdGlvbiwgZ2VuZSkKCmdlbmVzIDwtIGJpbmRfcm93cyhwdmFsYjQsIHB2YWxiOCwgbG10azIsIG15bDcsIGFpbXAyLCBjYWNuZzFiLCBjYWNuZzRiKQoKc25wcyA8LSBsZWZ0X2pvaW4oc25wcywgZ2VuZXMsCiAgICAgICAgICBieSA9IGMoInBvc2l0aW9uIiA9ICJwb3NpdGlvbiIpKQoKZ2VuZV9jb2xvciA8LSBjKGBhaW1wMmAgPSAiIzE3MjYzYiIsCiAgICAgICAgICAgICAgICBgY2FjbmcxYmAgPSAiIzg2NzA5NSIsCiAgICAgICAgICAgICAgICBgY2Fjbmc0YmAgPSAiIzUzNmE1YiIsCiAgICAgICAgICAgICAgICBgbG10azJgID0gIiNmNWQyZjEiLAogICAgICAgICAgICAgICAgYG15bDdgID0gIiM1MDRhNWQiLAogICAgICAgICAgICAgICAgYHB2YWxiNGAgPSAiI2VmZmVmZiIsCiAgICAgICAgICAgICAgICBgcHZhbGI4YCA9ICIjYWFkMWYzIikKCmdncGxvdChkYXRhID0gc25wcywgCiAgICAgICBtYXBwaW5nID0gYWVzKHkgPSB1bmtub3duRU0sCiAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbiwgCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBnZW5lKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIAogICAgICAgICAgICAgc2hhcGUgPSAyMSwgCiAgICAgICAgICAgICBzaXplID0gMS41KSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsCiAgICAgICAgICAgICBzdHJva2UgPSAwLjA1LAogICAgICAgICAgICAgYWxwaGEgPSAwLjc1LCAKICAgICAgICAgICAgIHNoYXBlID0gMjEpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBnZW5lX2NvbG9yKQpgYGAKCiFbU2NyZWVuIGdyYWIgZnJvbSBVQ1NDIGdlbm9tZSBicm93c2VyIG9mIEFtZXJpY2FuIHNoYWQgcmVmZXJlbmNlIGdlbm9tZSBhdCBvdXIgcmVnaW9uIG9mIGludGVyZXN0IGFzIGZvdW5kIGluIHRoZSBwYWlyd2lzZSBGc3QgcGxvdC5dKGNocjMtc3BlYy1yZWdpb24tc2NyZWVuZ3JhYi5wbmcpCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2VuZV9kZXNjIDwtIHJlYWRfdHN2KCJnZW5lLWRlc2NyaXB0aW9ucy50c3YiKQpndF90YmwgPC0gZ3QoZ2VuZV9kZXNjLAogICAgICAgICAgICAgcm93bmFtZV9jb2wgPSAiR2VuZSIpCmd0X3RibCA8LSBndF90YmwgfD4KICB0YWJfaGVhZGVyKHRpdGxlID0gIkdlbmVzIFdpdGhpbiBUaGUgUmVnaW9uIG9mIEludGVyZXN0IiwKICAgICAgICAgICAgIHN1YnRpdGxlID0gImNocjM6MjQsNjYwLDAwMC0yNCw3NTAsMDAwIikgfD4KICB0YWJfc291cmNlX25vdGUoc291cmNlX25vdGUgPSAiUmVmZXJlbmNlcyIpIHw+CiAgdGFiX3NvdXJjZV9ub3RlKHNvdXJjZV9ub3RlID0gInB2YWxiNDogaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW5lLz90ZXJtPURhbmlvK3JlcmlvK3B2YWxiNCIpIHw+CiAgdGFiX3NvdXJjZV9ub3RlKHNvdXJjZV9ub3RlID0gInB2YWxiODogaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW5lLz90ZXJtPURhbmlvK3JlcmlvK3B2YWxiOCIpIHw+CiAgdGFiX3NvdXJjZV9ub3RlKHNvdXJjZV9ub3RlID0gImxtdGsyOiBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2dlbmUvNTY0NjY2LyIpIHw+CiAgdGFiX3NvdXJjZV9ub3RlKHNvdXJjZV9ub3RlID0gImFpbXAyOiBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2dlbmUvNDA2NjQ3IikgfD4KICB0YWJfc291cmNlX25vdGUoc291cmNlX25vdGUgPSAibXlsNzogaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW5lLzMwNTkyLyIpIHw+CiAgdGFiX3NvdXJjZV9ub3RlKHNvdXJjZV9ub3RlID0gImNhY25nNGI6IGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvZ2VuZS83OTQyMjIvIikgfD4KICB0YWJfc291cmNlX25vdGUoc291cmNlX25vdGUgPSAiY2FjbmcxYjogaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9nZW5lLzU3MTE5MyIpIHw+CiAgc3ViX21pc3NpbmcoY29sdW1ucyA9IGV2ZXJ5dGhpbmcoKSwKICAgICAgICAgICAgICByb3dzID0gZXZlcnl0aGluZygpLAogICAgICAgICAgICAgIG1pc3NpbmdfdGV4dCA9ICIiKSB8PgogIG9wdF9yb3dfc3RyaXBpbmcoKQpndF90YmwKYGBgCg==